Решения уравнения КдФ в виде бегущей волны

В.Э. Адлер. Классические интегрируемые системы, весенний семестр 2020

Проанализируем простейшее семейство точных решений уравнения КдФ

(Subscript[u, t])=(Subscript[u, 3])+6u (Subscript[u, 1]),

а именно, решения вида u=-2y(X), X=x-c t. Множитель -2 введён здесь для удобства. Функция y(X) удовлетворяет ОДУ порядка 3, которое легко два раза проинтегрировать:

y'''-12y y'+c y'=0    ⇒

y''-6(y^2)+c y+(Subscript[c, 1])=0   ⇒   (интегрирующий множитель 2y')

(((y'))^2)=4R(y)=4(y^3)-c (y^2)-2(Subscript[c, 1])y-(Subscript[c, 2]).

Решение последнего уравнения можно записать в неявном виде, как

∫((dy)/(Sqrt[R(y)]))= 2X+d,

то есть, задача сводится к обращению интеграла в левой части. Вообще говоря, это приводит к эллиптическим функциям, но если корни кратные, то ответ упрощается.

Отметим следующие точечные преобразования, действующие на решениях КдФ. Благодаря им, корни R можно сдвигать и масштабировать, так что остаётся не более одного существенного параметра. Проверьте, что каждое из этих преобразований образует однопараметрическую группу, действующую на переменных x,t,u (во втором случае нужно дополнительно переобозначить a->exp(a)).

Утверждение. Если u(x,t) удовлетворяет уравнению КдФ, то это верно также для функций

U(x,t)=u(x+6a t,t)+a  (преобразование Галилея),

U(x,t)=a u(a x,(a^3)t)  (растяжение).

Clear[u]
U=u[x+6 a t,t]+a;
Expand[D[U,t]-D[U,x,x,x]-6U D[U,x]]

U=(a^2)u[a x,(a^3) t];
Factor[D[U,t]-D[U,x,x,x]-6U D[U,x]]

Рациональное решение

Пусть все корни R совпадают:

(((y'))^2)=4(((y-a))^3), c=12a.

Отсюда находим y=a+(((X+d))^(-2)). Есть также особое решение y=a, но оно не представляет интереса. Получаем полюсное решение

u(x,t)=a-2(((x-12a t+d))^(-2)).

u=-2a-2(((x-12a t+d))^(-2));
Together[D[u,t]-D[u,x,x,x]-6u D[u,x]]

Plot[u/.{a->0,d->0},{x,-10,10},PlotRange->{{-10,10},{-10,1}},
AxesLabel->{"x","u"}]

Солитон

Пусть совпадают два корня. С учётом преобразования Галилея, можно считать, что они равны 0, тогда имеем

(((y'))^2)=4(y^2) (y-a),  c=4a.

Здесь удобно сделать замену y=(Y^(-2)), это даст  (((Y'))^2)=1-a (Y^2)  ⇒  Y''=-a Y, что легко решается. После несложных вычислений получаем три cущественно различных решения, два для a<0 и одно для a>0:

y=-((k^2)/((Cosh[k X+d])^2));
Factor[TrigExpand[((D[y,X])^2)-4(y^2)(y+(k^2))]]

y=((k^2)/((Sinh[k X+d])^2));
Factor[TrigExpand[((D[y,X])^2)-4(y^2)(y+(k^2))]]

y=((k^2)/((Cos[k X+d])^2));
Factor[TrigExpand[((D[y,X])^2)-4(y^2)(y-(k^2))]]

Clear[y]

Возвращаясь к u, получаем солитон и два полюсных решения. С учетом растяжения и сдвига x, можно положить k=1, d=0 (но, конечно, когда мы перейдем к многосолитонным решениям, эти параметры у всех солитонов нельзя будет убить одновременно).

u=((2(k^2))/((Cosh[k x+4(k^3)t+d])^2));

Together[TrigToExp[D[u,t]-D[u,x,x,x]-6u D[u,x]]]

Plot[u/.{k->1,d->0,t->0},{x,-10,10},PlotRange->{{-10,10},{-0.1,2.1}},
AxesLabel->{"x","u"}]

u=-((2(k^2))/((Sinh[k x+4(k^3)t+d])^2));

Together[TrigToExp[D[u,t]-D[u,x,x,x]-6u D[u,x]]]

Plot[u/.{k->1,d->0,t->0},{x,-10,10},PlotRange->{{-10,10},{-10,1}},
AxesLabel->{"x","u"}]

u=-((2(k^2))/((Cos[k x-4(k^3)t+d])^2));
Together[TrigToExp[D[u,t]-D[u,x,x,x]-6u D[u,x]]]

Plot[u/.{k->1,d->0,t->0},{x,-10,10},PlotRange->{{-10,10},{-5,0.1}},
AxesLabel->{"x","u"}]

Кноидальная волна

Рассмотрим кривую  в фазовой плоскости (y,y')

(((y'))^2)=4R(y)=4(y^3)-c (y^2)-2(Subscript[c, 1])y-(Subscript[c, 2]).

Её форма определяется нулями правой части. Если они вещественны и различны, то имеем овал и неограниченную ветвь. Если один корень вещественный и два комплексно сопряженных, то есть только одна неограниченная ветвь. На следующем графике можно посмотреть, как меняется кривая в зависимости от выбора коэффициентов (пунктиром нарисован график самого кубического многочлена 4R). После запуска программы нужно активировать эту ячейку [Shift-Enter].

pl[R_]:=Plot[Evaluate[{4R,2Sqrt[R],-2Sqrt[R]}/.y->yy],{yy,-4,4},
PlotStyle->{{Dashed,Blue},Red,Red},
PlotRange->{{-3,3},{-6,6}},
AxesLabel->{"y","y'"}]

Manipulate[
pl[(4(y^3)-c (y^2)-2c1 y-c2)/4],
{{c,2},-5,5,Appearance->"Labeled"},
{{c1,2},-5,5,Appearance->"Labeled"},
{{c2,-2},-5,5,Appearance->"Labeled"}
]

Двигая ползунки, можно получить и вырожденные случаи, рассмотренные выше. При этом, движению по неограниченным ветвям отвечают, в плоскости (x,u), полюсные решения, а движению по петле на левом рисунке отвечает солитон.

GraphicsRow[{pl[(y^2)(y+2)],pl[(y^2)(y-2)]},ImageSize->500]

Рассмотрим теперь движение по ограниченному овалу кривой в случае, когда все корни вещественны и различны. Уравнение для y совпадает, с точностью до линейной замены, с уравнением для ℘-функции Вейерштрасса, но, так как эта функция имеет полюс в нуле, то удобнее выразить ответ через эллиптические функции Якоби. Напомним их определение: это решение системы ОДУ

sn'x=dn x cn x,
cn'x=-dn x sn x,
dn'x=-k sn x cn x,
sn 0=0, cn 0=dn0=1,

где 0<k<1. Из этих уравнений легко получить соотношения

(sn^2)x+(cn^2)x=1, k (sn^2)x+(dn^2)x=1.

cn=JacobiCN[x,k];
sn=JacobiSN[x,k];
dn=JacobiDN[x,k];
{D[sn,x]-dn cn,D[cn,x]+dn sn ,D[dn,x]+k sn cn,
D[(sn^2)+(cn^2),x],D[k (sn^2)+(dn^2),x]}

Plot[Evaluate[{sn,cn,dn}/.k->2],{x,0,10},
PlotStyle->{Red,Green,Blue,Black,Black,Black},
PlotRange->{-1.2,1.2},
PlotLegends->LineLegend[{Red,Blue,Green},{"sn x","cn x","dn x"}],
AxesLabel->{"x ",None}]

Нетрудно показать, что если положить y=(Subscript[K, 1])+(Subscript[K, 2])(cn^2)((Subscript[K, 3])x), то (((y'))^2) будет представляться в виде многочлена третей степени от y. Остаётся только немного уточнить константы. Приведём сразу окончательный ответ:

u=((4 (b^2)(1-2k)-c)/6)+2(b^2)k ((JacobiCN[b(x-c t)+d,k])^2);
Factor[D[u,t]-D[u,x,x,x]-6u D[u,x]]

Factor[%/.{((JacobiDN[X_,k])^2):>1-k ((JacobiSN[X,k])^2),((JacobiCN[X_,k])^2):>1-((JacobiSN[X,k])^2)}]

Здесь можно выбрать постоянную c так, чтобы уничтожить свободный член, благодаря преобразованию Галилея, тогда график будет касаться оси x. За счет растяжения, можно положить b=1; параметр d уничтожается сдвигом x или t. Остаётся один существенный параметр k. При его увеличении пички в кноидальной волне разъезжаются друг от друга и в пределе k=1 получается солитонное решение.

Manipulate[
Plot[2k ((JacobiCN[x,k])^2),{x,-30,30},PlotStyle->Blue,PlotRange->{-0.1,2},AxesLabel->{"x ","u"}],
{{k,0.2},0,1,Appearance->"Labeled"}
]